<template>
  <div class="container">
    <van-nav-bar title="搜索中心" left-arrow @click-left="$router.back()" />
    <!-- 搜索框组件 -->
    <van-search
      v-model="keyWord"
      placeholder="请输入搜索关键词"
      @search="onSearch"
    />
    <!-- 联想搜索模版 -->
    <van-cell-group class="suggest-box" v-if="keyWord">
      <!-- span高亮联想关键词 -->
      <van-cell
        @click="
          $router.push({
            path: '/search/result',
            query: {
              q: sug.replace(`<span>${keyWord}</span>`, keyWord),
            },
          })
        "
        icon="search"
        v-for="sug in suggestList"
        :key="sug"
        ><p v-html="sug"></p
      ></van-cell>
    </van-cell-group>
    <!-- 搜索历史记录模版 -->
    <div class="history-box" v-else-if="historyList.length">
      <div class="head">
        <span>历史记录</span>
        <van-icon @click="clearHistory" name="delete"></van-icon>
      </div>
      <van-cell-group>
        <van-cell v-for="history in historyList" :key="history">
          <a @click="goSearch(history)" class="word_btn">{{ history }}</a>
          <van-icon
            @click="delHistory(history)"
            class="close_btn"
            slot="right-icon"
            name="cross"
          />
        </van-cell>
      </van-cell-group>
    </div>
  </div>
</template>

<script>
import { suggest } from '@/api/article'
/**
 * 搜索历史记录=》和后台没有关系
 * 1. 设计数据结构：['vue3.0', 'react 学习','今日油条']
 * 2. 定义个key
 */
// 本地存储搜索历史记录的key
const TOUTIAO_SEARCH_HISTORY = 'TOUTIAO_SEARCH_HISTORY'
// 测试mock数据
// localStorage.setItem(TOUTIAO_SEARCH_HISTORY, JSON.stringify(['vue3.0', 'react 学习', '今日油条']))

export default {
  name: 'search-index',
  data () {
    return {
      // 搜索关键词
      keyWord: '',
      // 搜索历史记录
      historyList: JSON.parse(localStorage.getItem(TOUTIAO_SEARCH_HISTORY)) || [],
      // 联想补全列表
      suggestList: []
    }
  },
  watch: {
    // 处理联想补全关键词
    keyWord () {
      // 函数防抖：一段时间内只执行一次；这段时间内，如果再次执行会被取消=》借助：setTimeout实现
      // 判断：定时器ID存在=》取消上次定时任务
      this.timerId && clearTimeout(this.timerId)
      // 600ms内执行一次
      this.timerId = setTimeout(async () => {
        console.log('处理联想补全关键词:', this.keyWord)
        if (!this.keyWord) {
          // 清空上次补全结果
          this.suggestList = []
          return false
        }
        // 调用接口处理联想补全关键词
        const { status, data } = await suggest(this.keyWord)
        if (status === 200) {
          console.log(data.options)
          this.suggestList = data.options.map((item) => item.replace(this.keyWord, `<span>${this.keyWord}</span>`))
          console.log(this.suggestList)
        }
      }, 600)
    }
  },
  methods: {
    // 按回车时触发(手机上点击软键盘的确认)
    onSearch (keyWord) {
      // console.log(keyWord)
      /**
       * 1. 处理边界
       * 2. 跳转之前=》保存当次搜索的关键词
       * 3. 带上当次的关键词=》跳转搜索结果页
       */
      if (!keyWord) return false
      // 处理重复情况
      const historySet = new Set(this.historyList)
      historySet.add(keyWord)
      // this.historyList = [...historySet]
      // 同步本地数据
      localStorage.setItem(TOUTIAO_SEARCH_HISTORY, JSON.stringify([...historySet]))
      // 跳转
      this.$router.push({ path: '/search/result', query: { q: keyWord } })
    },
    // 删除某个历史记录
    delHistory (history) {
      // 数据删除
      this.historyList = this.historyList.filter((item) => item !== history)
      // 本地同步删除
      localStorage.setItem(TOUTIAO_SEARCH_HISTORY, JSON.stringify(this.historyList))
    },
    // 跳转搜索结果页=》带上搜索的关键词
    goSearch (history) {
      this.$router.push({ path: '/search/result', query: { q: history } })
    },
    // 清空历史记录
    clearHistory () {
      this.$dialog.confirm({
        title: '提示',
        message: '确认删除全部历史记录！'
      })
        .then(() => {
          // on confirm
          // console.log(
          //   '点击确定！'
          // )
          this.historyList = []
          // 本地同步
          localStorage.setItem(TOUTIAO_SEARCH_HISTORY, null)
        })
        .catch(() => {
          // on cancel
          console.log('点击取消')
        })
    }
  }
}
</script>

<style scoped lang='less'>
// 联想补全
.suggest-box {
  /deep/ .van-cell {
    padding: 10px 20px;
    color: #999;
    p {
      span {
        color: red;
      }
    }
  }
}
// 搜索历史记录
.history-box {
  padding: 0 20px;
  .head {
    line-height: 36px;
    color: #999;
    text-align: left;
    .van-icon {
      font-size: 16px;
      float: right;
      margin-top: 10px;
    }
  }
  .van-cell {
    padding: 10px 0;
  }
  .word_btn {
    color: #3296fa;
  }
  .close_btn {
    margin-top: 5px;
    color: #999;
  }
}
</style>
